package com.ticket.sass.admin.service.impl;


import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.ticket.sass.common.entity.tenant.CommoditySkuAttrEntity;
import com.ticket.sass.admin.mapper.CommoditySkuAttrMapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;import com.ticket.sass.admin.service.BaseService;

/**
 * <p>
 * SKU属性 服务实现类
 * </p>
 *
 * @author ywb
 * @since 2024-03-06
 */
@Service
public class CommoditySkuAttrServiceImpl extends ServiceImpl<CommoditySkuAttrMapper, CommoditySkuAttrEntity> implements BaseService<CommoditySkuAttrEntity> {
    public boolean existForAttrName(Long cinemaId, String attrName) {
        QueryWrapper<CommoditySkuAttrEntity> queryWrapper = new QueryWrapper<>();
        queryWrapper.eq("cinema_id", cinemaId);
        queryWrapper.eq("name", attrName);
        return baseMapper.selectCount(queryWrapper) > 0;
    }
    
    /**
     * 根据影院ID和商品SKU属性ID判断记录是否存在
     * @param cinemaId 影院ID
     * @param id 商品SKU属性ID
     * @return true：记录存在；false：记录不存在
     */
    public boolean isCommoditySkuAttrExists(Long cinemaId, Long id) {
        // 查询条件封装
        QueryWrapper<CommoditySkuAttrEntity> queryWrapper = new QueryWrapper<>();
        queryWrapper.eq("cinema_id", cinemaId);
        queryWrapper.eq("id", id);
        
        // 执行查询
        Long count = baseMapper.selectCount(queryWrapper);
        
        // 判断记录是否存在
        return count > 0;
    }
    
    /**
     * 根据属性值查询商品SKU属性的ID，如果属性不存在则创建并返回ID
     * @param attr 属性值
     * @param commodityId 商品ID
     * @param cinemaId 影院ID
     * @return 商品SKU属性的ID
     */
    public Long getOrCreateAttrId(String attr, Long commodityId, Long cinemaId) {
        // 查询属性是否已存在
        CommoditySkuAttrEntity existingAttr = lambdaQuery()
            .eq(CommoditySkuAttrEntity::getName, attr)
            .eq(CommoditySkuAttrEntity::getCommodityId, commodityId)
            .eq(CommoditySkuAttrEntity::getCinemaId, cinemaId)
            .one();
        
        // 如果属性已存在，则直接返回ID
        if (existingAttr != null) {
            return existingAttr.getId();
        }
        
        // 如果属性不存在，则创建属性并返回ID
        CommoditySkuAttrEntity newAttr = new CommoditySkuAttrEntity(attr, commodityId, cinemaId);
        save(newAttr);
        return newAttr.getId();
    }

}
